const { chromium } = require('playwright');

class EcommerceCrawler {
    constructor(config = {}) {
        this.browser = null;
        this.page = null;
        this.config = {
            headless: false,
            slowMo: 1000,
            timeout: 30000,
            ...config
        };
    }

    async init() {
        console.log('正在启动浏览器...');
        this.browser = await chromium.launch({ 
            headless: this.config.headless, // 设置为false以便看到浏览器操作
            slowMo: this.config.slowMo // 减慢操作速度，便于观察
        });
        
        this.page = await this.browser.newPage();
        
        // 设置用户代理
        await this.page.setExtraHTTPHeaders({
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36'
        });
        
        console.log('浏览器启动成功！');
    }

    async openHomePage(url, options = {}) {
        try {
            console.log(`正在打开主页: ${url}`);
            await this.page.goto(url, { 
                waitUntil: 'networkidle',
                timeout: options.timeout || this.config.timeout
            });
            
            console.log('主页加载完成！');
            
            // 等待页面完全加载
            await this.page.waitForTimeout(2000);
            
            // 获取页面标题
            const title = await this.page.title();
            console.log(`页面标题: ${title}`);
            
            return true;
        } catch (error) {
            console.error('打开主页失败:', error.message);
            return false;
        }
    }

    /**
     * 使用网站配置进行爬取
     * @param {Object} siteConfig - 网站配置对象
     */
    async crawlWithConfig(siteConfig) {
        try {
            if (typeof siteConfig.customCrawl === 'function') {
                // 使用自定义爬取逻辑
                return await siteConfig.customCrawl(this.page, this);
            } else {
                // 使用默认爬取逻辑
                await this.openHomePage(siteConfig.url, siteConfig.crawlOptions);
                return {
                    success: true,
                    url: siteConfig.url,
                    title: await this.page.title()
                };
            }
        } catch (error) {
            console.error('爬取失败:', error.message);
            return {
                success: false,
                error: error.message
            };
        }
    }

    async close() {
        if (this.browser) {
            await this.browser.close();
            console.log('浏览器已关闭');
        }
    }
}

// 主函数
async function main() {
    const crawler = new EcommerceCrawler();
    
    try {
        // 初始化爬虫
        await crawler.init();
        
        // 打开电商网站主页（这里以淘宝为例）
        const success = await crawler.openHomePage('https://www.taobao.com');
        
        if (success) {
            console.log('成功打开主页！');
            
            // 等待用户观察页面
            console.log('等待10秒后关闭浏览器...');
            await crawler.page.waitForTimeout(10000);
        } else {
            console.log('打开主页失败！');
        }
        
    } catch (error) {
        console.error('程序执行出错:', error);
    } finally {
        // 关闭浏览器
        await crawler.close();
    }
}

// 运行主函数
if (require.main === module) {
    main().catch(console.error);
}

module.exports = EcommerceCrawler;
